package com.coderly.onlinegallerysharingplatform.service;

import cn.hutool.core.util.ObjUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.coderly.onlinegallerysharingplatform.common.response.Response;
import com.coderly.onlinegallerysharingplatform.model.dao.entity.SpaceDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.coderly.onlinegallerysharingplatform.model.dto.req.space.*;
import com.coderly.onlinegallerysharingplatform.model.dto.resp.space.SpaceRespDTO;

/**
* @author 26788
* @description 针对表【t_space(空间)】的数据库操作Service
* @createDate 2025-03-11 20:17:23
*/
public interface SpaceService extends IService<SpaceDO> {

    /**
     * 检验空间
     */
    void validSpace(SpaceDO spaceDO, boolean isAdd);

    /**
     * 实体类转包装响应类
     */
    SpaceRespDTO getSpaceRespDTO(SpaceDO spaceDO);

    /**
     * 实体类转包装响应类（分页）
     */
    Page<SpaceRespDTO> getSpaceRespDTOPage(Page<SpaceDO> spaceDOPage);

    /**
     * 构建查询Wrapper
     */
    QueryWrapper<SpaceDO> buildSpaceQueryWrapper(QuerySpaceReqDTO querySpaceReqDTO);

    /**
     * 根据空间级别添加空间中的默认字段
     * @param spaceDO
     */
    void fillSpaceDefaultFieldBySpaceLevel(SpaceDO spaceDO);

    /**
     * 创建空间
     * @param
     */
    Long createSpace(CreateSpaceReqDTO createSpaceReqDTO);

    /**
     * 删除空间
     * @param deleteSpaceReqDTO
     * @return
     */
    Response<Boolean> deleteSpace(DeleteSpaceReqDTO deleteSpaceReqDTO);

    /**
     * 编辑空间
     * @param editSpaceReqDTO
     * @return
     */
    Response<Boolean> editSpace(EditSpaceReqDTO editSpaceReqDTO);

    /**
     * 判断指定空间是否存在
     * @param spaceId
     * @return
     */
    default Boolean exist(Long spaceId) {
        return ObjUtil.isNotNull(this.getById(spaceId));
    }
}
